# -*- coding: cp1252 -*-
'''
Created on 16/06/2012

@author: Raphoka
'''


from Persistencia.CriarTabelas import CriarTabelas
from Controle.Cliente import Cliente
import MySQLdb as mdb


class ClienteDao(object):
    '''
    classdocs
    '''


    def __init__(self):
        '''
        Constructor
        '''
        self.conexao = CriarTabelas() 
        self.__host = self.conexao._CriarTabelas__host
        self.__schema = self.conexao._CriarTabelas__schema
        self.__usuario = self.conexao._CriarTabelas__usuario
        self.__port = self.conexao._CriarTabelas__port
        self.__senha = self.conexao._CriarTabelas__senha
        
    def cadastrarCliente(self, cliente):
        
        nome = cliente.getNome()
        dataNascimento = cliente.getDataNascimento()
        cpf = cliente.getCpf()
        email = cliente.getEmail()
        celular = cliente.getCelular()
        telefone = cliente.getTelefone()
        dataCriacao = cliente.getDataCriacao()
        ativo = cliente.getAtivo()
        
        #=======================================================================
        # Gerar SQL com ou sem Data de Nascimento
        #=======================================================================
        
        if dataNascimento != '':
            sql1 = '''
INSERT INTO CLI_CLIENTE (CLI_NOME, CLI_CPF, CLI_DATA_NASCIMENTO, CLI_EMAIL, CLI_TELEFONE, CLI_CELULAR,
CLI_DATA_CRIACAO, CLI_ATIVO) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')
''' %(nome, cpf, dataNascimento, email, telefone, celular, dataCriacao, ativo)
        else:
            sql1 = '''
INSERT INTO CLI_CLIENTE (CLI_NOME, CLI_CPF, CLI_EMAIL, CLI_TELEFONE, CLI_CELULAR,
CLI_DATA_CRIACAO, CLI_ATIVO) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')
''' %(nome, cpf, email, telefone, celular, dataCriacao, ativo)
            
        comandosSQL = [sql1]
        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema)               
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False
        
    def editarCliente(self, cliente):
        Id = cliente.getId()
        nome = cliente.getNome()
        ativo = cliente.getAtivo()
        dataNascimento = cliente.getDataNascimento()
        cpf = cliente.getCpf()
        email = cliente.getEmail()
        celular = cliente.getCelular()
        telefone = cliente.getTelefone()
        dataCriacao = cliente.getDataCriacao()
        
        
        if dataNascimento != '':
            sql1 = '''
UPDATE CLI_CLIENTE SET CLI_NOME = '%s', CLI_ATIVO = '%s', CLI_DATA_NASCIMENTO = '%s', CLI_CPF = '%s', 
CLI_EMAIL = '%s', CLI_CELULAR = '%s', CLI_TELEFONE = '%s', CLI_DATA_CRIACAO = '%s' WHERE CLI_ID = '%s'        
'''%(nome, ativo, dataNascimento, cpf, email, celular, telefone, dataCriacao, Id)
        else:
            sql1 = '''
UPDATE CLI_CLIENTE SET CLI_NOME = '%s', CLI_ATIVO = '%s', CLI_CPF = '%s', 
CLI_EMAIL = '%s', CLI_CELULAR = '%s', CLI_TELEFONE = '%s', CLI_DATA_CRIACAO = '%s' WHERE CLI_ID = '%s'        
'''%(nome, ativo, cpf, email, celular, telefone, dataCriacao, Id)
        
        
        comandosSQL = [sql1]
        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema)                
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False
        
    def removerCliente(self, cliente):
        ativo = cliente.getAtivo()
        Id = cliente.getId()
        
        sql1 = '''
UPDATE CLI_CLIENTE SET CLI_ATIVO = '%s' WHERE CLI_ID = '%s'
'''%(ativo, Id)
        
        comandosSQL = [sql1]
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema, charset="utf8", use_unicode = True)           
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False

    def pesquisarListaClientes(self, dado, campo):
        dado = "%"+dado+"%"
        sql1 = '''
SELECT * FROM CLI_CLIENTE WHERE %s LIKE '%s' order by CLI_NOME
'''%(campo, dado)

        comandosSQL = [sql1]

        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema, charset="utf8", use_unicode = True)
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)

            dados = cursor.fetchall()
            cursor.close()
            return self.CriarObjetosCliente(dados)
        except mdb.Error, e:
            print "Error %d: %s" % (e.args[0], e.args[1])
            return self.CriarObjetosCliente(dados)
        
    def pesquisarCliente(self, dado, campo):
        
        sql1 = '''
SELECT * FROM CLI_CLIENTE WHERE %s LIKE '%s' order by CLI_NOME
'''%(campo, dado)

        comandosSQL = [sql1]

        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema, charset="utf8", use_unicode = True)
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)

            dados = cursor.fetchall()
            cursor.close()
            
            cliente = self.CriarObjetosCliente(dados)[0]
            return cliente
        except :
            
            return None

        
############################
# -- METODOS AUXILIARES -- #
############################


    def CriarObjetosCliente(self, dados):
        ListaClientes = []
        
        for i in dados:
            Id = str(i[0])
            nome = (i[1])
            dataNascimento = i[2]
            cpf = i[3]
            email = i[4]
            telefone = i[5]
            celular = i[6]
            dataCriacao = i[7]
            ativo = i[8]
            
            if dataNascimento == None:
                dataNascimento = ''
            if cpf == None:
                cpf = ''
            if email == None:
                email = ''
            if telefone == None:
                telefone = ''
            if celular == None:
                celular = ''
            
            cliente = Cliente()
            cliente.setId(Id)
            cliente.setNome(nome)
            cliente.setDataNascimento(dataNascimento)
            cliente.setCpf(cpf)
            cliente.setEmail(email)
            cliente.setCelular(celular)
            cliente.setTelefone(telefone)
            cliente.setDataCriacao(dataCriacao)
            cliente.setAtivo(ativo)
            
            ListaClientes.append(cliente)
            
        return ListaClientes

        
if __name__ == "__main__":
    dao = ClienteDao()
    c = Cliente()
    


    
        
        
